package ro.inf.bomberman;

import java.util.ArrayList;

/**
 * Die Gamefield Klasse unterteilt das gezeichnete Spielfeld in logische
 * Feld-Objekte und speichert sie in einer Array Liste.
 *
 * @author Michi
 *
 */
public class GameField {

    private Field fieldArray[][] = new Field[21][15];

    /**
     * Initialisierung eines Spielfelds. Jedes Feld-Objekt ist 40x40 groß. Das
     * Spielfeld fasst 21 vertikale und 15 horizontale Felder
     *
     * @author Michi
     */
    public GameField() {
        for (int i = 0; i < 840; i += 40) {
            for (int k = 0; k < 600; k += 40) {
                Field field = new Field(i, k);
                this.fieldArray[(int) i / 40][(int) k / 40] = field;
            }
        }
    }

    /**
     * Findet zu jeder auf dem Spielfeld befindlichen Koordinate das passende
     * Feld-Objekt für Logik-Events.
     *
     * @author Michi
     * @param coord Koordinate für die das Feld-Objekt gefunden werden soll.
     * @return Field-Objekt das für die übergebene Koordinate zuständig ist.
     */
    public Field mapCoordToField(Coordinate coord) {
        return this.fieldArray[(int) coord.getX() / 40][(int) coord.getY() / 40];
    }

    /**
     * Findet alle Bomben auf allen Feldern und erstellt daraus eine ArrayList
     *
     * @author Michi
     * @return ArrayList mit allen Bomben auf allen Feldern auf dem Spielfeld.
     */
    public ArrayList<Bomb> getBombsToExplode() {
        ArrayList<Bomb> bombsToExplode = new ArrayList<Bomb>();
        for (int i = 0; i < 840; i += 40) {
            for (int k = 0; k < 600; k += 40) {
                if (this.fieldArray[(int) i / 40][(int) k / 40].containsBomb() == true) {
                    bombsToExplode.add((Bomb) this.fieldArray[(int) i / 40][(int) k / 40].getRegisteredBomb());
                }
            }
        }
        return bombsToExplode;
    }

    /**
     * Gibt das aktuelle Spielfeld zurück.
     *
     * @return Field[][] Das aktuelle Spielfeld.
     */
    public Field[][] getSpielfeld() {
        return this.fieldArray;
    }
}
